# -*- coding: utf-8 -*-
"""
Created on Sun Nov 14 13:55:23 2021

@author: 刘长奇-2019300677
"""

from sklearn.ensemble import RandomForestClassifier 
import numpy as np
import matplotlib.pyplot as plt
num,q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,q13,q14,q15,q16,q17,q18,q19,q20,q21,q22,q23,q24,q25,q26,q27,q28,q29,q30,q31,q32,q33,q34,q35,q36,y= np.loadtxt("train.csv",delimiter=',', usecols=(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37), 
	unpack=True)
num = num.reshape(-1,1)
y = y.reshape(-1,1)
for i in range(1,37):
    exec ("q%s=q%s.reshape(-1,1)"%(i,i))
train = np.hstack((q1.reshape(-1,1),q2.reshape(-1,1)))
for i in range(3,37):
    exec ("train=np.hstack((train,q%s.reshape(-1,1)))"%i)
#产生训练集


# 建立随机森林模型
rfc = RandomForestClassifier(n_estimators=10, random_state=0)
rfc = rfc.fit(train,y)       
#用训练集数据训练模型 

y_score=rfc.predict_proba(train)
y_test=np.zeros((200000,2))
for i in range(200000):
    if y[i,0]==0:
        y_test[i,0]=1
    else:
        y_test[i,1]=1

from sklearn.metrics import roc_curve, auc
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(2):   #两类
    #计算每个target的fpr和tpr
    fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])  #y_test 
    roc_auc[i] = auc(fpr[i], tpr[i])  # auc直接计算面积
    
# Compute micro-average ROC curve and ROC area
fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_score.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])

plt.figure()
id=1  # 选择不同的id即绘制不同target分类的效果
lw = 2
plt.plot(fpr[id], tpr[id], color='darkorange',
         lw=lw, label='ROC curve (area = %0.2f)' % roc_auc[1])#S1=0.97
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show() 

#综上，神经网络和随机森林分类方式两种模型的利用价值是相同的，
#虽然随机森林分类精度更高，但是时间效率小于神经网络；
#神经网络虽然分类精度低于随机森林，但是时间效率更高一些；
#应用到实际环境，可根据不同要求选择合适方法。




